package java6699.lesson07;

import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;

import java.io.File;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.ArrayList;
import java.util.List;

/**
 * @program: java_zzx
 * @description:
 * @author: zzx
 * @create: 2022-10-18 08:17
 **/
public class ListFile6699Controller {
    @FXML
    public ListView<String> lvFiles;
    @FXML
    public TextField tfDir;
    @FXML
    public Label lblCount;

    @FXML
    public void listAll(ActionEvent actionEvent) {
        List<String> list = new ArrayList<>();    //list专门用于存储文件
        ObservableList<String> oList = lvFiles.getItems();//获取lvFiles中所有项目
        oList.clear();  //每次清除之前lvFiles中的数据
        String dir = tfDir.getText().trim();   // 获取输入的目录名称

        File f;
        if (dir.isEmpty()) {
            f = new File(".");//使用当前目录
            tfDir.setText(".");
        } else {
            f = new File(dir);
            if (!f.isDirectory()) {
                lblCount.setText("不是目录");
                return;
            }
            if (dir.matches("[a-zA-Z]:")) {
                f = new File(dir + ".");//纠正d：
            }
        }

        //根据目录名称创建File对象
        File file = new File(dir);
        //判断输入目录名称是否是目录同时是否存在，列出该目录中的内容
        if (file.isDirectory() && file.exists()) {
            //获取指定目录下的所有文件/文件夹的File数组
            File[] files = f.listFiles();
            for (File fi : files) {
                LocalDateTime time = Instant.ofEpochMilli(fi.lastModified())
                        .atZone(ZoneId.systemDefault()).toLocalDateTime();
                String date = time.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
                //判断是目录还是文件
                if (fi.isDirectory()) {
                    oList.add("文件夹，" + fi.getName() + "，\t" + date);

                } else if (fi.isFile()) {
                    list.add("文件，" + fi.getName() + "，\t" + date + "，"
                            + (fi.length() / 1024 + 1) + "KB");
                }
            }
            lblCount.setText("子目录：" + oList.size() + "，文件：" + list.size());
            oList.addAll(list);
        }else {
            //不是目录进行提示
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("列出目录的内容");
            alert.setHeaderText("请注意");
            alert.setContentText("输入的目录名称有误：不是目录！");
            alert.show();
        }
    }
}
